import lexer.Lexer;
import parser.Parser;
import semantic.SemanticAnalyzer;
import interpreter.Interpreter;
import parser.ASTNode;

public class Main {
    public static void main(String[] args) {
        // 测试公式
        String formula = " MA5 := MA(CLOSE, 5);\n" +
                " MA10 := MA(CLOSE, 10);\n" +
                "CROSS_UP := CROSS(MA5, MA10);\n" +
                "BUY_SIGNAL := IF(CROSS_UP, 1, 0);        \n" +
                "// 输出选股结果\n" +
                "BUY_SIGNAL";

        try {
            System.out.println("解析公式: " + formula);

            // 词法分析
            Lexer lexer = new Lexer(formula);

            // 语法分析
            Parser parser = new Parser(lexer);
            ASTNode ast = parser.parse();

            System.out.println("抽象语法树:");
            System.out.println(ast);

            // 语义分析
            SemanticAnalyzer semanticAnalyzer = new SemanticAnalyzer();
            semanticAnalyzer.analyze(ast);

            System.out.println("语义分析完成，未发现错误");

            // 公式计算（解释执行）
            Interpreter interpreter = new Interpreter(semanticAnalyzer.getSymbolTable());
            Object result = interpreter.interpret(ast);

            // 显示计算结果
            interpreter.displayResults();

            System.out.println("最终结果: " + result);

        } catch (Exception e) {
            System.err.println("错误: " + e.getMessage());
            e.printStackTrace();
        }
    }
}